﻿Public Class frmTrDrut
    'formularz wyswietla historie drutu 
    'jesli na ktoryms z etapow drut powstal z polaczenia kilku innych drutow to druty te sa wyswietlane innym kolorem i proces wyswietlania zostaje zatrzymany
    'dopiero po kliklnieciu na ktorys z nich wyswietla sie historia wybranego drutu
    Private mvarZlecenie As clsTrSzukanie
    Private mvarPozycjaZlecenia As clsInhTrPozycjaZlecenia
    Private mvarDbHolder As clsDataBase
    Private mvarUzytkownik As clsUzytkownik
    Private mvarWyznUruchomienia As Boolean
    Private mvarDrut As clsInhTrDrut
    Private mvarPozycjaSchematu As clsInhTrPozycjeSchematu
    Private mvarMaterialProdukcyjny As clsInhTrMaterialProdukcyjny
    Private mvarWysylanyDrut As clsTrStatystyki
    Private mvarWyznNieLicz As Boolean
    Private mvarLicznikOperacji As Integer

    Public Sub New()

        ' To wywołanie jest wymagane przez projektanta.
        InitializeComponent()

        ' Dodaj inicjację po wywołaniu funkcji InitializeComponent().
        mvarDbHolder = New clsDataBase(VAR_CONNECTION_PARAMETERS, VAR_ERROR_HANDLER)

        mvarUzytkownik = CType(clsUzytkownik.Instance(), clsUzytkownik)
        UzupelnijPrac()
    End Sub

    Public Sub New(drut As Entities.Tracking.Drut)
        Me.New()
        txtNumerDrutu.Text = drut.Id.ToString()
        SzukajDrutu()
    End Sub

    Private Sub UzupelnijPrac()

        Dim lvarDataTable As New DataTable
        Dim lvarPracownik As New clsPracownik
        Dim lvarI As Integer

        lvarDataTable = clsPracownik.PobierzWszystkichPracownikow(mvarDbHolder, VAR_ERROR_HANDLER)

        If Not lvarDataTable Is Nothing Then
            For Each lvarRow As DataRow In lvarDataTable.Rows
                If CBool(lvarRow("aktywny")) Then
                    lvarI = lvarI + 1
                    lvarPracownik = New clsPracownik(CStr(lvarRow("id")), CStr(IIf(IsDBNull(lvarRow("numer")), String.Empty, lvarRow("numer"))), CStr(IIf(IsDBNull(lvarRow("imie")), String.Empty, lvarRow("imie"))), CStr(IIf(IsDBNull(lvarRow("nazwisko")), String.Empty, lvarRow("nazwisko"))), CStr(IIf(IsDBNull(lvarRow("login")), String.Empty, lvarRow("login"))), CStr(IIf(IsDBNull(lvarRow("haslo")), String.Empty, lvarRow("haslo"))), CBool(IIf(IsDBNull(lvarRow("aktywny")), String.Empty, lvarRow("aktywny"))))
                    dgvPrac.Rows.Add(lvarI, lvarPracownik.Nazwisko, 0, 0)
                    dgvPrac.Rows(dgvPrac.Rows.Count - 1).Tag = lvarPracownik
                End If
            Next
        End If
    End Sub

    Private Sub UzupelnijDane()

        Dim lvarZlecenie As clsInhTrZlecenie

        txtInfMaterial.Text = mvarPozycjaZlecenia.GatunekMaterialu.NazwaAng
        txtInfWymiar.Text = mvarPozycjaZlecenia.Wymiar
        txtInfIlosc.Text = mvarPozycjaZlecenia.Ilosc & " " & mvarPozycjaZlecenia.Jednostka.Jednostka
        txtInfTolDolna.Text = mvarPozycjaZlecenia.TolDolna
        txtInfTolGorna.Text = mvarPozycjaZlecenia.TolGorna
        txtInfWytrzymaloscMin.Text = mvarPozycjaZlecenia.WytrzymaloscMin
        txtInfWytrzymaloscMax.Text = mvarPozycjaZlecenia.WytrzymaloscMax
        txtInfWydluzenie.Text = mvarPozycjaZlecenia.Wydluzenie
        txtInfSzpula.Text = mvarPozycjaZlecenia.Pakowanie.Nazwa
        If mvarPozycjaZlecenia.PowierzonyMaterial Then
            'txtInfMagazyn.Size = New Point(148, 41)
            'txtInfUwagi.Size = New Point(147, 46)
            txtInfMagazyn.Text = mvarPozycjaZlecenia.Magazyn.Nazwa
            txtInfMagazyn.Text = txtInfMagazyn.Text & "(MAT. POWIERZ.)"
        Else
            txtInfMagazyn.Text = mvarPozycjaZlecenia.Magazyn.Nazwa
        End If
        txtInfUwagi.Text = mvarPozycjaZlecenia.Uwagi

        lvarZlecenie = New clsInhTrZlecenie
        lvarZlecenie.InformacjeZlecenia(mvarDbHolder, mvarPozycjaZlecenia.Id)
        txtInfKlient.Text = lvarZlecenie.Klient.NazwaSkrocona
        txtInfTerminRealizacji.Text = CDate(lvarZlecenie.InhTermin).ToShortDateString

    End Sub

    Private Sub UzupelnijInformacjeMaterialProdukcyjny(Drut As clsInhTrMaterialProdukcyjny)

        dgvInformacje.Rows.Add(dgvInformacje.Rows.Count + 1, "nr scht.: " & Drut.SchematId, "nr pow. mat.: " & Drut.Id, Drut.Pracownik.Nazwisko, Drut.Pakowanie.Nazwa, "###", Drut.WymiarMin, Drut.WymiarMax, Drut.Ilosc, "MAT. PRODUKCYJNY")
        dgvInformacje.Rows.Item(dgvInformacje.Rows.Count - 1).DefaultCellStyle.BackColor = Color.Lavender

    End Sub

    Private Sub UzupelnijInformacjeDrut(Drut As clsInhTrDrut)

        Dim lvarWaga As Double

        For Each lvarTmp As clsTrRodzic In Drut.Rodzic
            lvarWaga = lvarWaga + CDbl(lvarTmp.Waga)
        Next

        dgvInformacje.Rows.Add(dgvInformacje.Rows.Count + 1, Drut.PozycjeSchematuProdukcjiId, Drut.Id, Drut.Pracownik.Nazwisko, Drut.Pakowanie.Nazwa, Drut.Maszyna.Nazwa, Drut.WymiarMin, Drut.WymiarMax, lvarWaga, Drut.Opcja.Nazwa)
        dgvInformacje.Rows(dgvInformacje.Rows.Count - 1).Tag = Drut
        mvarLicznikOperacji = mvarLicznikOperacji + 1

        If Drut.Opcja.Id = 4 Then
            dgvInformacje.Size = New Size(942, 220)
            dgvInformacje.Location = New Point(6, 110)
            grbInformacjeKontroli.Visible = True
            txtKontrolaWymiarMin.Text = Drut.Kontrola.WymiarMin
            txtKontrolaWymiarMax.Text = Drut.Kontrola.WymiarMax
            txtKontrolaIlosc.Text = Drut.Kontrola.Ilosc
            txtKontrolaOpakowanie.Text = Drut.Kontrola.Pakowanie.Nazwa
            txtKontrolaUstawienie.Text = Drut.Kontrola.ZwickUstawienia.Nazwa
            txtKontrolaPomiar.Text = Drut.Kontrola.ZwickPomiar
            txtKontrolaWytrzymalosc.Text = Drut.Kontrola.ZwickWytrzymalosc
            txtKontrolaProcent.Text = Drut.Kontrola.ZwickProcentWydluzenia
            txtKontrolaSila.Text = Drut.Kontrola.ZwickSila
            txtKontrolaStatus.Text = Drut.Kontrola.Opcje.Nazwa
            txtKontrolaUwagi.Text = Drut.Kontrola.Uwagi
        End If

    End Sub

    Private Sub UzupelnijHistorieDrutu(Drut As clsInhTrDrut)

        Dim lvarWyznMaterialuProdukcyjnego As Boolean = False
        Dim lvarWyznIlosciDrutRodzic As Boolean = False
        Dim lvarDrut1 As clsInhTrDrut
        Dim lvarDrut2 As clsInhTrDrut
        lvarDrut1 = Drut

        Do
            For Each lvarTmp As clsTrRodzic In lvarDrut1.Rodzic
                If lvarDrut1.Rodzic.Count > 1 Then
                    If Not lvarTmp.WyznMaterialProdukcyjny Then
                        lvarDrut2 = New clsInhTrDrut(lvarTmp.DrutRodzicId, mvarDbHolder)
                        UzupelnijInformacjeDrut(lvarDrut2)
                        dgvInformacje.Rows(dgvInformacje.Rows.Count - 1).DefaultCellStyle.BackColor = Color.Red
                        '                       dgvWyslanyDrut.SelectedRows(0).DefaultCellStyle.BackColor = Color.Red
                        mvarWyznNieLicz = True
                    Else
                        lvarWyznMaterialuProdukcyjnego = True
                        mvarMaterialProdukcyjny = New clsInhTrMaterialProdukcyjny(lvarTmp.DrutRodzicId, mvarDbHolder)
                        UzupelnijInformacjeMaterialProdukcyjny(mvarMaterialProdukcyjny)
                    End If
                    lvarWyznIlosciDrutRodzic = True
                Else
                    If Not lvarTmp.WyznMaterialProdukcyjny Then
                        lvarDrut1 = New clsInhTrDrut(lvarTmp.DrutRodzicId, mvarDbHolder)
                        ' mvarLicznikOperacji = mvarLicznikOperacji + 1
                        UzupelnijInformacjeDrut(lvarDrut1)
                    Else
                        lvarWyznMaterialuProdukcyjnego = True
                        mvarMaterialProdukcyjny = New clsInhTrMaterialProdukcyjny(lvarTmp.DrutRodzicId, mvarDbHolder)
                        UzupelnijInformacjeMaterialProdukcyjny(mvarMaterialProdukcyjny)
                    End If
                End If

            Next

        Loop Until (lvarWyznMaterialuProdukcyjnego Or lvarWyznIlosciDrutRodzic)

    End Sub


    Private Sub Szukaj()

        Dim lvarCommand As String
        Dim lvarI As Integer
        Dim lvarSuma As Double
        Dim lvarWaga As Double

        If dtpOkresOd.Value.Date > dtpOkresDo.Value.Date Then
            MessageBox.Show("Wybierz poprawnie kryterium wyszukiwania", "WIREMET")
        Else
            If dtpOkresOd.Checked Or dtpOkresDo.Checked Or chbOkres.Checked Then
                lvarCommand = " AND wysylka.data_wysylki :: date between '" & dtpOkresOd.Value.Date & "' AND '" & dtpOkresDo.Value.Date & "'"
            End If
        End If


        mvarWysylanyDrut = New clsTrStatystyki
        mvarWysylanyDrut.WyslanyDrut(mvarDbHolder, lvarCommand)

        dgvWyslanyDrut.Rows.Clear()
        If mvarWysylanyDrut.DrutWyslany.Count = 0 Then
            MessageBox.Show("nie ma.", "WIREMET")
        Else
            For Each lvarDrut As clsInhTrDrut In mvarWysylanyDrut.DrutWyslany
                lvarI += 1
                dgvWyslanyDrut.Rows.Add(lvarI, lvarDrut.Id)
                dgvWyslanyDrut.Rows(dgvWyslanyDrut.Rows.Count - 1).Tag = lvarDrut
                For Each lvarRodzic As clsTrRodzic In lvarDrut.Rodzic
                    lvarWaga = lvarWaga + Double.Parse(lvarRodzic.Waga)
                Next
                lvarSuma = lvarSuma + lvarWaga
                lvarWaga = 0
            Next
        End If

        txtIlosc.Text = lvarSuma.ToString()
        lvarSuma = 0

    End Sub

    Private Sub SzukajDrutu()

        If txtNumerDrutu.Text = String.Empty Then
            MessageBox.Show("Podaj numer drutu.", "WIREMET")
        Else

            mvarDrut = New clsInhTrDrut(Integer.Parse(txtNumerDrutu.Text), mvarDbHolder)

            If mvarDrut.PakowanieId > 0 Then

                'uzupelnienie informacji o zleceniu
                mvarPozycjaZlecenia = New clsInhTrPozycjaZlecenia(clsTrSzukanie.SzukajIdPozycjiZlecenia(mvarDbHolder, mvarDrut.Id.ToString()), mvarDbHolder, True)
                UzupelnijDane()

                'uzupelnienie informacji o drucie rodzic
                UzupelnijInformacjeDrut(mvarDrut)
                UzupelnijHistorieDrutu(mvarDrut)

                If dgvInformacje.Rows.Count > 0 Then
                    dgvInformacje.ClearSelection()
                End If
                'If Not mvarWyznNieLicz And dgvWyslanyDrut.SelectedRows(0).DefaultCellStyle.BackColor <> Color.Lavender Then
                '    Oblicz()
                'Else
                '    mvarWyznNieLicz = False
                'End If

            Else
                MessageBox.Show("Nie ma drutu o takim numerze.", "WIREMET")
            End If
        End If

    End Sub

    Private Sub txtNumerDrutu_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtNumerDrutu.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            If dgvInformacje.Rows.Count > 0 Then
                dgvInformacje.Rows.Clear()
                dgvInformacje.Size = New Size(942, 292)
                dgvInformacje.Location = New Point(6, 30)
                grbInformacjeKontroli.Visible = False
                txtKontrolaWymiarMin.Text = String.Empty
                txtKontrolaWymiarMax.Text = String.Empty
                txtKontrolaIlosc.Text = String.Empty
                txtKontrolaOpakowanie.Text = String.Empty
                txtKontrolaUstawienie.Text = String.Empty
                txtKontrolaPomiar.Text = String.Empty
                txtKontrolaWytrzymalosc.Text = String.Empty
                txtKontrolaProcent.Text = String.Empty
                txtKontrolaSila.Text = String.Empty
                txtKontrolaStatus.Text = String.Empty
                txtKontrolaUwagi.Text = String.Empty
            End If
            SzukajDrutu()
        End If
    End Sub


    Private Sub dgvInformacje_CellMouseDoubleClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvInformacje.CellMouseDoubleClick

        If dgvInformacje.SelectedRows.Count > 0 Then
            If dgvInformacje.SelectedRows(0).DefaultCellStyle.BackColor = Color.Red Then
                For lvarI As Integer = dgvInformacje.Rows.Count - 1 To 0 Step -1
                    If dgvInformacje.Rows(lvarI).DefaultCellStyle.BackColor = Color.Red Then
                        Exit For
                    Else
                        dgvInformacje.Rows.Remove(dgvInformacje.Rows(lvarI))
                    End If
                Next
                mvarDrut = New clsInhTrDrut(CInt(dgvInformacje.SelectedRows(0).Cells("colPotomekNumer").Value), mvarDbHolder)
                UzupelnijHistorieDrutu(mvarDrut)
            End If
        End If

    End Sub

    Private Sub cmdSzukaj_Click(sender As Object, e As EventArgs) Handles cmdSzukaj.Click
        Szukaj()
    End Sub

    Private Sub dgvWyslanyDrut_CellMouseClick1(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvWyslanyDrut.CellMouseClick
        txtNumerDrutu.Text = CType(dgvWyslanyDrut.SelectedRows(0).Tag, clsInhTrDrut).Id.ToString()
        If dgvInformacje.Rows.Count > 0 Then
            dgvInformacje.Rows.Clear()
        End If
        For lvarIndex_2 As Integer = 0 To dgvPrac.Rows.Count - 1
            dgvPrac.Rows(lvarIndex_2).Cells("colPracDodane").Value = 0
        Next
        mvarLicznikOperacji = 0
        SzukajDrutu()
    End Sub


    Private Sub Oblicz()

        Dim lvarIosc As Double

        lvarIosc = CDbl(dgvInformacje.Rows(0).Cells("colPotomekWaga").Value) / mvarLicznikOperacji

        For lvarIndex_1 As Integer = 0 To mvarLicznikOperacji - 1
            For lvarIndex_2 As Integer = 0 To dgvPrac.Rows.Count - 1
                If CInt(CType(dgvPrac.Rows(lvarIndex_2).Tag, clsPracownik).Id) = CType(dgvInformacje.Rows(lvarIndex_1).Tag, clsInhTrDrut).PracownikId Then
                    dgvPrac.Rows(lvarIndex_2).Cells("colPracIlosc").Value = CDbl(dgvPrac.Rows(lvarIndex_2).Cells("colPracIlosc").Value) + lvarIosc
                    dgvPrac.Rows(lvarIndex_2).Cells("colPracDodane").Value = CDbl(dgvPrac.Rows(lvarIndex_2).Cells("colPracDodane").Value) + lvarIosc
                End If
            Next
        Next

        dgvWyslanyDrut.SelectedRows(0).DefaultCellStyle.BackColor = Color.Lavender

    End Sub

End Class